package edu.upc.clase.demo.dao.impl;

import edu.upc.clase.demo.dao.PublicidadDao;
import edu.upc.clase.demo.entity.Publicidad;
import java.util.List;
import javax.sql.DataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport;
import org.springframework.stereotype.Repository;

/**
 *
 * Six-Group-Upc
 */
@Repository
public class PublicidadDaoImpl extends SimpleJdbcDaoSupport implements PublicidadDao {
    
    private static Logger log = LoggerFactory.getLogger(PublicidadDaoImpl.class);
    
    @Autowired
    public PublicidadDaoImpl(DataSource dataSource) {
            log.info("Asignando el dataSource");
            setDataSource(dataSource);
    }
    
    @Override
    public Integer insertar(Publicidad publicidad) {
        
        getJdbcTemplate().update(
                "insert into publicidades (Titulo,Contenido,FechaInicio,FechaFin,Tarifa,NroClicks,Ubicacion,CodigoLocal) values (?, ?, ?, ?, ?, ?, ?, ?)",
                publicidad.getTitulo(),publicidad.getContenido(),publicidad.getFechaInicio(),publicidad.getFechaFin(),publicidad.getTarifa(),publicidad.getNroClicks(),publicidad.getUbicacion(),publicidad.getCodigoLocal());
        return getSimpleJdbcTemplate().queryForInt("call identity()");
    }
    
    @Override
    public void actualizar(Publicidad publicidad) {        
        getJdbcTemplate().update(
                "update publicidades set Titulo = ?, Contenido = ?, FechaInicio = ?, FechaFin = ?, Tarifa = ?, NroClicks = ?, Ubicacion = ?, CodigoLocal = ? where CodigoPublicidad = ?",
                 publicidad.getTitulo(),publicidad.getContenido(),publicidad.getFechaInicio(),publicidad.getFechaFin(),publicidad.getTarifa(),publicidad.getNroClicks(),publicidad.getUbicacion(),publicidad.getCodigoLocal(),publicidad.getCodigoPublicidad());        
    }
    
    @Override
    public void eliminar(Publicidad publicidad) {
        getJdbcTemplate().update(
                "delete from publicidades where CodigoPublicidad = ?",publicidad.getCodigoPublicidad());        
    }

    @Override
    public Publicidad buscar(Integer id) {
        try {
                return getSimpleJdbcTemplate().queryForObject(
                                "select CodigoPublicidad,Titulo,Contenido,FechaInicio,FechaFin,Tarifa,NroClicks,Ubicacion,CodigoLocal from publicidades where CodigoPublicidad=?",
                                new BeanPropertyRowMapper<Publicidad>(Publicidad.class), id);
        } catch (EmptyResultDataAccessException e) {
                return null;
        }        
    }

    @Override
    public List<Publicidad> buscarTodos() {
        return getSimpleJdbcTemplate().query(
                       // "select CodigoPublicidad,Titulo,Contenido,FechaInicio,FechaFin,Tarifa,NroClicks,Ubicacion,p.CodigoLocal,l.DescripcionLocal from publicidades p inner join locales l on p.CodigoLocal=l.CodigoLocal",
                 "select CodigoPublicidad,Titulo,Contenido,FechaInicio,FechaFin,Tarifa,NroClicks,case Ubicacion when 1 then 'pagina principal' when 2 then 'paginas del cliente' when 3 then 'paginas del duenio' end as Telefono,p.CodigoLocal,l.DescripcionLocal from publicidades p inner join locales l on p.CodigoLocal=l.CodigoLocal",
                        new BeanPropertyRowMapper<Publicidad>(Publicidad.class));
    }

    @Override
    public Publicidad buscar(String DescripcionPublicidad) {
        try {
                return getSimpleJdbcTemplate().queryForObject(
                                "select CodigoPublicidad,Titulo,Contenido,FechaInicio,FechaFin,Tarifa,NroClicks,Ubicacion,CodigoLocal from publicidades where DescripcionPublicidad=?",
                                new BeanPropertyRowMapper<Publicidad>(Publicidad.class), DescripcionPublicidad);
        } catch (EmptyResultDataAccessException e) {
                return null;
        }           
    }
}